<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!-- 引入 React 核心库 -->
  <script src="../js/react.development.js"></script>
  <!-- 用于支持 React操作DOM -->
  <script src="../js/react-dom.development.js"></script>
  <!-- 用于将 jsx转为js -->
  <script src="../js/babel.min.js"></script>
</head>

<body>
  <div id="root"></div>

  <script type="text/babel">
    // 整个构造器只会调一次
    class Login extends React.Component{
      state = {
        username: '',
        password: ''
      }
      getFormData = (e) => {
        e.preventDefault();
        alert(`账号： ${this.state.username}， 密码： ${this.state.password}`)
      }
      // 高阶函数
      /**
       * 高阶函数： 1、函数的函数形参是 函数 的为高阶函数， 比如： setTimeout, Promise, arr.map(() => {})
       *           2、函数返回函数的的为 高阶函数, 比如， 闭包， return () {}
      */
      // 函数柯里化： 多层函数嵌套
      getUserNameData = (dataType) => {
        return (e) => {
          this.setState({[dataType]: e.target.value})
        }
      }
      // 第二种写法
      getInpData = (dataType, e) => {
        this.setState({[dataType]: e.target.value})
      }
      render() {
        // onChange: 返回的只能是个函数， 
        return (
          <form onSubmit={this.getFormData}>
            <input onChange={this.getUserNameData('username')} type="text"/>
            <input onChange={() => this.getInpData('password', event)} type="password"/>
            <button>登录</button>
          </form>
        )
      }
    }
    // 此章节就相当于 Vue 的 v-model 
    ReactDOM.render(<Login/>, document.getElementById('root'))
  </script>
</body>

</html>